package cn.study.synchronizedTest;

/**
 * @author  跟大佳一起学架构
 *  锁消除   锁粗化
 **/
public class LockWideTest {

    /**
     * 锁粗化
     */
    StringBuffer buffer = new StringBuffer();
    public void append(){
        buffer.append("aaa").append("bbb").append("ccc");
    }

    /**
     * 锁消除 - 局部变量
     * -XX:+EliminateLocks 开启锁消除(jdk8默认开启）
     * -XX:-EliminateLocks 关闭锁消除
     * @param str1
     * @param str2
     */
    public void append(String str1, String str2) {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(str1).append(str2);
    }

    /**
     * @description: 锁消除优化的性能提高点
     * @param args
     * @return void
     */
    public static void main(String[] args) throws InterruptedException {
        LockWideTest demo = new LockWideTest();
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100_000_000; i++) {
            demo.append("aaa", "bbb");
        }
        long end = System.currentTimeMillis();
        System.out.println("执行时间：" + (end - start) + " ms");
        // 锁消除的依据是什么？
    }

}
